package com.tedu.api;

import org.junit.Test;

public class StringBuilderAPI {
    /**
     * 字符串大量拼接：注意String造成内存溢出
     * String str="123"+st;
     *  String st="456";
     */
    @Test
    public void testString(){
        String str="字符串";
        for (int i=0;i<1000000;i++){
            str+=i;//字符串1   2   3   4  ...
            System.out.println(str);
        }
    }
    /**
     * String------不可改变对象       BUG（常量池）
     * 假设：拼接出100000000000w个String----内存【开销过大】
     * 操作系统发现内存空间越来越小，会去硬盘上开辟空间---程序、电脑会卡
     *
     * 解决方案：不创建新对象，原来对象实现拼接【添加、替换、插入】
     * StringBuilder对象      可改变字符串对象
     * 语法：StringBuilder sb=newStringBuilder(“字符串”)
     *
     * C语言       变量  int a=malloc(4);开辟4个字节空间
     *                  o=1;
     *                  free(a);        清理内容
     *                  不会存在内存溢出
     * Java语言    变量   int  a=1  内存空间开辟o空间，保存1，java虚拟机提供GC功能
     *                  会存在内存溢出
     */
    @Test
    public void testSB(){
        //创建可变的字符串对象【解决String的大量拼接，造成内存溢出】
        String str="你就是我的";
        StringBuilder sb=new StringBuilder(str);
        //a
        // append方法   添加新字符串，等同于加号【拼接】
       sb.append("小可爱~");
        System.out.println(sb);
    }
    /**
     * replace方法           替换  返回值:String
     * 作用：可以将字符串中指定范围内“内容”替换成给定的内容
     * 口诀：含头不含尾
     * replace（int  start，int end，String str）
     *   开始位置，结束位置，替换内容
     */
    @Test
    public void testReplace(){
        //创建StringBuilder可变字符串类
        StringBuilder sb=new StringBuilder("你就是我的小可爱~");
        sb.replace(5,8,"小Baby");
        System.out.println(sb);
    }

/**
 * insert方法：    插入 返回值：String
 * 作用：将给定的字符串插入到当前字符串中某个位置
 * insert(int index,String str)
 *   插入位置，插入内容
 */
@Test
public void testInsert(){
    //创建 可变字符串对象
    StringBuffer so=new StringBuffer("陪我去买东西~");
   so.insert(0,"艾莉    ");
    System.out.println(so);
}
/**
 * 考试题
 * StringBuilder和StringBuffer的区别？
 * StringBuilder和StringBuffer---完全一致【追加、替换、插入】
 * StringBuffer---JDK1.0----线程安全【效率低】
 * StringBuilder----JDK1.5---线程不安全【效率高】  v
 *
 *需求说明书：模块用什么类【标注】
 */
}



